import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { PromptTemplate } from '../../../types/prompt'

export const usePromptStore = defineStore('prompt', () => {
  // 状态
  const templates = ref<PromptTemplate[]>([])
  const loading = ref(false)
  const coverPromptTemplate = ref<string>('')
  const selectedTemplateId = ref<number | null>(null)
  
  // 不同用途的提示词模板ID
  const coverSelectedTemplateId = ref<number | null>(null)
  const outlineSelectedTemplateId = ref<number | null>(null)
  const contentSelectedTemplateId = ref<number | null>(null)
  const reviewSelectedTemplateId = ref<number | null>(null)
  const bookAnalysisSelectedTemplateId = ref<number | null>(null)

  // 方法
  const fetchTemplates = async () => {
    loading.value = true
    try {
      // 这里应该调用API获取提示词模板
      // 暂时返回空数组
      templates.value = []
    } catch (error) {
      console.error('获取提示词模板失败:', error);
      // 可以在这里添加错误处理逻辑，比如显示错误提示给用户
      // 例如：showErrorToast('获取提示词模板失败，请稍后重试');
    } finally {
      loading.value = false
    }
  }

  // 保存封面生成提示词模板
  const saveCoverPromptTemplate = (template: string) => {
    coverPromptTemplate.value = template
    // 同时保存到本地存储，以便页面刷新后仍然可用
    localStorage.setItem('coverPromptTemplate', template)
  }

  // 获取封面生成提示词模板
  const getCoverPromptTemplate = (): string => {
    // 如果内存中有值，直接返回
    if (coverPromptTemplate.value) {
      return coverPromptTemplate.value
    }
    
    // 否则从本地存储获取
    const savedTemplate = localStorage.getItem('coverPromptTemplate')
    if (savedTemplate) {
      coverPromptTemplate.value = savedTemplate
      return savedTemplate
    }
    
    // 如果都没有，返回默认模板
    const defaultTemplate = '书籍封面：《{title}》，{description}，高质量书籍封面，清晰，专业设计'
    coverPromptTemplate.value = defaultTemplate
    return defaultTemplate
  }

  // 获取处理后的封面提示词（替换占位符）
  const getProcessedCoverPrompt = (title: string, description: string = ''): string => {
    const template = getCoverPromptTemplate()
    let processedPrompt = template
    
    // 替换模板中的占位符
    processedPrompt = processedPrompt.replace('{title}', title)
    processedPrompt = processedPrompt.replace('{description}', description)
    
    return processedPrompt
  }

  // 保存选中的模板ID
  const saveSelectedTemplateId = (id: number | null) => {
    selectedTemplateId.value = id
    // 同时保存到本地存储
    if (id !== null) {
      localStorage.setItem('selectedTemplateId', id.toString())
    } else {
      localStorage.removeItem('selectedTemplateId')
    }
  }

  // 获取选中的模板ID
  const getSelectedTemplateId = (): number | null => {
    // 如果内存中有值，直接返回
    if (selectedTemplateId.value !== null) {
      return selectedTemplateId.value
    }
    
    // 否则从本地存储获取
    const savedId = localStorage.getItem('selectedTemplateId')
    if (savedId) {
      const id = parseInt(savedId, 10)
      selectedTemplateId.value = id
      return id
    }
    
    return null
  }

  // 保存封面生成提示词模板ID
  const saveCoverSelectedTemplateId = (id: number | null) => {
    coverSelectedTemplateId.value = id
    // 同时保存到本地存储
    if (id !== null) {
      localStorage.setItem('coverSelectedTemplateId', id.toString())
    } else {
      localStorage.removeItem('coverSelectedTemplateId')
    }
  }

  // 获取封面生成提示词模板ID
  const getCoverSelectedTemplateId = (): number | null => {
    // 如果内存中有值，直接返回
    if (coverSelectedTemplateId.value !== null) {
      return coverSelectedTemplateId.value
    }
    
    // 否则从本地存储获取
    const savedId = localStorage.getItem('coverSelectedTemplateId')
    if (savedId) {
      const id = parseInt(savedId, 10)
      coverSelectedTemplateId.value = id
      return id
    }
    
    return null
  }

  // 保存大纲生成提示词模板ID
  const saveOutlineSelectedTemplateId = (id: number | null) => {
    outlineSelectedTemplateId.value = id
    // 同时保存到本地存储
    if (id !== null) {
      localStorage.setItem('outlineSelectedTemplateId', id.toString())
    } else {
      localStorage.removeItem('outlineSelectedTemplateId')
    }
  }

  // 获取大纲生成提示词模板ID
  const getOutlineSelectedTemplateId = (): number | null => {
    // 如果内存中有值，直接返回
    if (outlineSelectedTemplateId.value !== null) {
      return outlineSelectedTemplateId.value
    }
    
    // 否则从本地存储获取
    const savedId = localStorage.getItem('outlineSelectedTemplateId')
    if (savedId) {
      const id = parseInt(savedId, 10)
      outlineSelectedTemplateId.value = id
      return id
    }
    
    return null
  }

  // 保存正文生成提示词模板ID
  const saveContentSelectedTemplateId = (id: number | null) => {
    contentSelectedTemplateId.value = id
    // 同时保存到本地存储
    if (id !== null) {
      localStorage.setItem('contentSelectedTemplateId', id.toString())
    } else {
      localStorage.removeItem('contentSelectedTemplateId')
    }
  }

  // 获取正文生成提示词模板ID
  const getContentSelectedTemplateId = (): number | null => {
    // 如果内存中有值，直接返回
    if (contentSelectedTemplateId.value !== null) {
      return contentSelectedTemplateId.value
    }
    
    // 否则从本地存储获取
    const savedId = localStorage.getItem('contentSelectedTemplateId')
    if (savedId) {
      const id = parseInt(savedId, 10)
      contentSelectedTemplateId.value = id
      return id
    }
    
    return null
  }

  // 保存文章审批提示词模板ID
  const saveReviewSelectedTemplateId = (id: number | null) => {
    reviewSelectedTemplateId.value = id
    // 同时保存到本地存储
    if (id !== null) {
      localStorage.setItem('reviewSelectedTemplateId', id.toString())
    } else {
      localStorage.removeItem('reviewSelectedTemplateId')
    }
  }

  // 获取文章审批提示词模板ID
  const getReviewSelectedTemplateId = (): number | null => {
    // 如果内存中有值，直接返回
    if (reviewSelectedTemplateId.value !== null) {
      return reviewSelectedTemplateId.value
    }
    
    // 否则从本地存储获取
    const savedId = localStorage.getItem('reviewSelectedTemplateId')
    if (savedId) {
      const id = parseInt(savedId, 10)
      reviewSelectedTemplateId.value = id
      return id
    }
    
    return null
  }

  // 保存拆书分析提示词模板ID
  const saveBookAnalysisSelectedTemplateId = (id: number | null) => {
    bookAnalysisSelectedTemplateId.value = id
    // 同时保存到本地存储
    if (id !== null) {
      localStorage.setItem('bookAnalysisSelectedTemplateId', id.toString())
    } else {
      localStorage.removeItem('bookAnalysisSelectedTemplateId')
    }
  }

  // 获取拆书分析提示词模板ID
  const getBookAnalysisSelectedTemplateId = (): number | null => {
    // 如果内存中有值，直接返回
    if (bookAnalysisSelectedTemplateId.value !== null) {
      return bookAnalysisSelectedTemplateId.value
    }
    
    // 否则从本地存储获取
    const savedId = localStorage.getItem('bookAnalysisSelectedTemplateId')
    if (savedId) {
      const id = parseInt(savedId, 10)
      bookAnalysisSelectedTemplateId.value = id
      return id
    }
    
    return null
  }

  return {
    templates,
    loading,
    coverPromptTemplate,
    selectedTemplateId,
    coverSelectedTemplateId,
    outlineSelectedTemplateId,
    contentSelectedTemplateId,
    reviewSelectedTemplateId,
    bookAnalysisSelectedTemplateId,
    fetchTemplates,
    saveCoverPromptTemplate,
    getCoverPromptTemplate,
    getProcessedCoverPrompt,
    saveSelectedTemplateId,
    getSelectedTemplateId,
    saveCoverSelectedTemplateId,
    getCoverSelectedTemplateId,
    saveOutlineSelectedTemplateId,
    getOutlineSelectedTemplateId,
    saveContentSelectedTemplateId,
    getContentSelectedTemplateId,
    saveReviewSelectedTemplateId,
    getReviewSelectedTemplateId,
    saveBookAnalysisSelectedTemplateId,
    getBookAnalysisSelectedTemplateId
  }
})